创建共享目录

每个节点安装sshfs

yum install -y epel-release
yum -y install fuse-sshfs

选定一个备份目录做共享目录

例如我有ns0(10.1.1.0)、ns1(10.1.1.1)、ns2(10.1.1.2,主节点)三个节点,我选择ns2下的/home/dev/esbk目录做备份

# ns2下创建
mkdir /home/dev/esbk
chmod -R 777 esbk

其他所有节点挂载目录

# ns0、ns1下操作
sshfs root@10.1.1.2:/home/dev/esbk /home/dev/esbk -o allow_other

# 在ns0、ns1测试运行es的用户(我的为dev)是否有对共享目录的写的权限
sudo -u dev touch /home/dev/esbk/test

# 在ns2上/home/dev/esbk查看有没有成功创建test文件

# 如果要删除共享目录需要卸载挂载目录
fusermount -u filename

修改所有节点的elasticsearch.yml文件

vim es目录/config/elasticsearch.yml
# 添加path.repo配置共享仓库的位置
path.repo: ["/home/dev/esbk"]
# 保存后重启es

创建了共享目录后在共享目录下为集群创建共享仓库

PUT http://10.1.1.2:9200/_snapshot/my_backup 
{
    "type": "fs", 
    "settings": {
        "location": "/home/elk/es_backup",
        "compress": true, // 是否压缩,可选
    "max_snapshot_bytes_per_sec" : "50mb",  // 速度限制,默认为20mb,可选
        "max_restore_bytes_per_sec" : "50mb"
    }
}

备份索引数据

# 所有索引备份

PUT http://10.1.1.2:9200/_snapshot/my_backup/备份名

# 指定索引备份
{
    "indices": "index1, index2"
}

查看备份状态

GET http://10.1.1.2:9200/_snapshot/my_backup/备份名/_status

查看备份列表

GET http://10.1.1.2:9200/_snapshot/my_backup/_all

删除备份

DELETE http://10.1.1.2:9200/_snapshot/my_backup/备份名

恢复数据

# 全部恢复
# wait_for_completion=true 为阻塞运行,可选
POST http://10.1.1.2:9200/_snapshot/my_backup/备份名/_restore?wait_for_completion=true 

# 指定恢复index1索引
{
    "indices": "index1", 
    // 如需重命名,则增加
    "rename_pattern": "index1", // 需改名的原索引名
    "rename_replacement": "index2" // 改名后索引名
}

查看恢复状态

GET http://10.1.1.2:9200/_recovery/
# percent字段为恢复百分比

# 如需取消一个恢复
DELETE http://10.1.1.2:9200/恢复后的索引名